import 'package:flutter_tts/flutter_tts.dart';
import 'package:flutter/foundation.dart';
import 'dart:io';

class TTSService {
  static final TTSService _instance = TTSService._internal();
  factory TTSService() => _instance;
  TTSService._internal();

  final FlutterTts _flutterTts = FlutterTts();
  bool _isInitialized = false;
  bool _isWebPlatform = kIsWeb;
  bool _isSupportedPlatform = !kIsWeb && (Platform.isAndroid || Platform.isIOS);

  // 初始化TTS
  Future<void> initialize() async {
    if (_isInitialized) return;

    // 检查平台支持
    if (!_isSupportedPlatform) {
      print('⚠️ 当前平台不支持TTS功能: ${_isWebPlatform ? 'Web' : '未知平台'}');
      _isInitialized = true; // 标记为已初始化，避免重复检查
      return;
    }

    try {
      // 设置语言为中文
      await _flutterTts.setLanguage("zh-CN");

      // 设置语音速率 (0.1 - 1.0)
      await _flutterTts.setSpeechRate(1.0);

      // 设置音调 (0.5 - 2.0)
      await _flutterTts.setPitch(1.0);

      // 设置音量 (0.0 - 1.0)
      await _flutterTts.setVolume(1.0);

      // 获取可用的语音引擎
      final engines = await _flutterTts.getEngines;
      print('🎤 可用语音引擎: $engines');

      // 获取可用的语言
      final languages = await _flutterTts.getLanguages;
      print('🌍 可用语言: $languages');

      _isInitialized = true;
      print('✅ TTS服务初始化成功');
    } catch (e) {
      print('❌ TTS服务初始化失败: $e');
      _isInitialized = true; // 即使失败也标记为已初始化，避免重复尝试
    }
  }

  // 朗读文本
  Future<void> speak(String text) async {
    if (!_isInitialized) {
      await initialize();
    }

    // 检查平台支持
    if (!_isSupportedPlatform) {
      print('⚠️ 当前平台不支持TTS功能，无法朗读文本');
      return;
    }

    try {
      print(
        '🎤 开始朗读: ${text.length > 50 ? text.substring(0, 50) + '...' : text}',
      );

      // 停止当前播放
      await _flutterTts.stop();

      // 开始朗读
      await _flutterTts.speak(text);

      print('✅ 朗读开始');
    } catch (e) {
      print('❌ 朗读失败: $e');
    }
  }

  // 停止朗读
  Future<void> stop() async {
    // 检查平台支持
    if (!_isSupportedPlatform) {
      return;
    }

    try {
      await _flutterTts.stop();
      print('⏹️ 朗读已停止');
    } catch (e) {
      print('❌ 停止朗读失败: $e');
    }
  }

  // 暂停朗读
  Future<void> pause() async {
    try {
      await _flutterTts.pause();
      print('⏸️ 朗读已暂停');
    } catch (e) {
      print('❌ 暂停朗读失败: $e');
    }
  }

  // 设置语音速率
  Future<void> setSpeechRate(double rate) async {
    if (!_isSupportedPlatform) return;

    try {
      await _flutterTts.setSpeechRate(rate.clamp(0.1, 1.0));
      print('🎚️ 语音速率设置为: $rate');
    } catch (e) {
      print('❌ 设置语音速率失败: $e');
    }
  }

  // 设置音调
  Future<void> setPitch(double pitch) async {
    if (!_isSupportedPlatform) return;

    try {
      await _flutterTts.setPitch(pitch.clamp(0.5, 2.0));
      print('🎵 音调设置为: $pitch');
    } catch (e) {
      print('❌ 设置音调失败: $e');
    }
  }

  // 设置音量
  Future<void> setVolume(double volume) async {
    if (!_isSupportedPlatform) return;

    try {
      await _flutterTts.setVolume(volume.clamp(0.0, 1.0));
      print('🔊 音量设置为: $volume');
    } catch (e) {
      print('❌ 设置音量失败: $e');
    }
  }

  // 释放资源
  Future<void> dispose() async {
    if (!_isSupportedPlatform) return;

    try {
      await _flutterTts.stop();
      _isInitialized = false;
      print('🗑️ TTS服务已释放');
    } catch (e) {
      print('❌ 释放TTS服务失败: $e');
    }
  }

  // 检查是否支持TTS
  bool get isSupported => _isSupportedPlatform;
}
